package bitclub;

/**
 * @author BIT COMPANY
 */
import herramientas.BitUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import persistencia.PPelicula;

public class Pelicula extends Articulo {

    private String interpretes;
    private String nacionalidad;
    private int duracion;
    private String formato;

    public Pelicula(int id, String titulo, String genero, int ano, int clasificacionEdad, boolean activo, Date fechaAlta, Date fechaBaja, Proveedor proveedor, Tarifa tarifa, int vecesAlquilada, boolean disponible, String interpretes, String nacionalidad, int duracion, String formato) {
        super(id, titulo, genero, ano, clasificacionEdad, activo, fechaAlta, fechaBaja, proveedor, tarifa, vecesAlquilada, disponible);
        this.interpretes = interpretes;
        this.nacionalidad = nacionalidad;
        this.duracion = duracion;
        this.formato = formato;
    }

    public Pelicula(String titulo, String genero, int ano, int clasificacionEdad, boolean activo, Date fechaAlta, Date fechaBaja, Proveedor proveedor, Tarifa tarifa, int vecesAlquilada, boolean disponible, String interpretes, String nacionalidad, int duracion, String formato) {
        this(-1, titulo, genero, ano, clasificacionEdad, activo, fechaAlta, fechaBaja, proveedor, tarifa, vecesAlquilada, disponible, interpretes, nacionalidad, duracion, formato);
    }

    public Pelicula() {
        super();
    }

    public int getDuracion() {
        return duracion;
    }

    public void setDuracion(int duracion) {
        this.duracion = duracion;
    }

    public String getFormato() {
        return formato;
    }

    public void setFormato(String formato) {
        this.formato = formato;
    }

    public String getInterpretes() {
        return interpretes;
    }

    public void setInterpretes(String interpretes) {
        this.interpretes = interpretes;
    }

    public String getNacionalidad() {
        return nacionalidad;
    }

    public void setNacionalidad(String nacionalidad) {
        this.nacionalidad = nacionalidad;
    }

    @Override
    public String toString() {
        //En esta variable vamos a concatenar todos los atributos de nuestra Pelicula
        String resultado = "";

        resultado += "PELICULA________________________________________________________\n";
        //Si acabamos de crear la pelicula podemos mostrarla para confirmarla, entonces el id será -1
        if (this.getId() == -1) {
            resultado += "              " + this.getTitulo().toUpperCase() + ",  (" + this.getAno() + ")\n";
        } else {
            resultado += "              [Cod." + this.getId() + "]  " + this.getTitulo().toUpperCase() + ",  (" + this.getAno() + ")\n";
        }
        resultado += "________________________________________________________________\n";

        resultado += "Genero:       " + this.getGenero() + "\n";
        resultado += "Nacionalidad: " + this.getNacionalidad() + "\n";
        resultado += "Duración:     " + this.getDuracion() + "\n";
        resultado += "Interpretes:  " + this.getInterpretes() + "\n";
        resultado += "Formato:      " + this.getFormato() + "\n";
        if (this.getClasificacionEdad() == 0) {
            resultado += "Class.Edad:   Todos los publicos\n";
        } else {
            resultado += "Class.Edad:   " + this.getClasificacionEdad() + " años\n";
        }
        resultado += "Fecha Alta:   " + BitUtil.muestraFecha(this.getFechaAlta()) + "\n";
        if (this.getProveedor() != null) {
            resultado += "Proveedor:    " + this.getProveedor().getNombre() + ", " + this.getProveedor().getApellidos()
                    + "  [" + this.getProveedor().getNombredeEmpresa() + "] \n";
        }

        resultado += "________________________________________________________________\n";

        resultado += "Tarifa:       " + this.getTarifa().getNombre() + "\n";
        resultado += "              " + this.getTarifa().getPrecio() + " durante " + this.getTarifa().getNumDias() + " dias.\n";
        resultado += "              Hay un recargo de " + this.getTarifa().getRecargo() + " por día adicional.\n";
        resultado += "________________________________________________________________\n";

        if (this.getFechaBaja() != null && this.isActivo() == false) {
            resultado += "Fecha Baja:   " + BitUtil.muestraFecha(this.getFechaBaja()) + "\n";
        }
        resultado += "Alquileres:   " + this.getVecesAlquilada() + "       ";

        if (this.isDisponible()) {
            resultado += "              (LA PELICULA ESTÁ DISPONIBLE) \n";
        } else {
            resultado += "              (NO DISPONIBLE) \n";
        }

        resultado += "\n\n";
        return resultado;
    }

    public String toStringLinea() {
        String resultado = "";
        resultado += "________________________________________________________________\n";
        resultado += "   [Cod." + this.getId() + "]  " + this.getTitulo().toUpperCase() + ",  (" + this.getAno() + ")\n";
        resultado += "________________________________________________________________\n";
        return resultado;
    }

    /**
     * Crea un nuevo registro en BD con el objeto Articulo que lo usa
     */
    @Override
    public void nuevo() {
        PPelicula.nuevoBD(this);
    }

    /**
     * Actualiza los datos en la base de datos del objeto que lo usa
     */
    @Override
    public void actualizar() {
        PPelicula.actualizarBD(this);
    }

    public static List<Pelicula> seleccionarPorMasAlquilados(int cantidad) {
        List<Pelicula> listPelicula = new ArrayList();
        //Pedimos los artículos más alquilados a la capa de persistencia
        listPelicula = PPelicula.seleccionarPorMasAlquiladosBD(cantidad);
        return listPelicula;
    }

    public static List<Pelicula> seleccionarPorMenosAlquilados(int cantidad) {
        List<Pelicula> listPelicula = new ArrayList();
        //Pedimos los artículos más alquilados a la capa de persistencia
        listPelicula = PPelicula.seleccionarPorMenosAlquiladosBD(cantidad);
        return listPelicula;
    }
    
    /*
     * Metodo que llama a la clase de Persistencia de Película para devolver una
     * lista de películas cuya ID coincida con el introducido por teclado
     */
    public static Pelicula seleccionarPorCodigo(int codigo, boolean soloDisponible) {
        Pelicula pelicula;
        //Pedimos la película que tenga el código solicitado
        pelicula = PPelicula.seleccionarPorCodigoBD(codigo, soloDisponible);
        return pelicula;
    }
    
    /*
     * Metodo que llama a la clase de Persistencia de Película para devolver una
     * lista de películas cuya nombre contenga la palabra introducida por teclado
     */
    public static List<Pelicula> seleccionarPorTitulo(String titulo, boolean soloDisponible) {
        List<Pelicula> listPelicula = new ArrayList();
        //Pedimos los artículos que tengan cierta palabra en el título
        listPelicula = PPelicula.seleccionarPorTituloBD(titulo, soloDisponible);
        return listPelicula;
    }
    
    /*
     * Metodo que llama a la clase de Persistencia de Película para devolver una
     * lista de películas cuya genero coincida con el introducido por teclado
     */
    public static List<Pelicula> seleccionarPorGenero(String genero, boolean soloDisponible) {
        List<Pelicula> listPelicula = new ArrayList();
        //Pedimos los artículos que pertenezcan a cierto género
        listPelicula = PPelicula.seleccionarPorGeneroBD(genero, soloDisponible);
        return listPelicula;
    }
      
    /*
     * Metodo que llama a la clase de Persistencia de Película para devolver una
     * lista de películas cuya año coincida con el introducido por teclado
     */
    public static List<Pelicula> seleccionarPorAno(String ano, boolean soloDisponible) {
        List<Pelicula> listPelicula = new ArrayList();
        //Pedimos los artículos que pertenezcan a cierto año
        listPelicula = PPelicula.seleccionarPorAnoBD(ano, soloDisponible);
        return listPelicula;
    }
}
